#pragma once

#include "command_buffer.h"
#include "viewport.h"
#include "bounded.h"
#include "pipeline.h"
#include "buffer.h"
#include <utility>
#include <iterator>
#include <algorithm>

namespace blu
{

	typedef bounded<command_buffer, pipeline, generic_buffer> drawable_cmdbuf;

	/* Arguments for non-indexed draw.
	*/
	class drawing_args
	{
	public:
		std::uint32_t first_vertex()
		{

		}

		std::uint32_t vertex_count()
		{

		}

		std::uint32_t skipped_times()
		{

		}

		std::uint32_t times()
		{

		}
	};

	/* Non-indexed direct draw.
	*/
	void draw(
		drawable_cmdbuf &cmdbuf_,
		const drawing_args &args_)
	{
	}

	/* Non-indexed indirect draw.
	*/
	void draw(
		drawable_cmdbuf &cmdbuf_,
		const buffered_array_view<indirect_args_buffer, drawing_args> &argsbufview_)
	{

	}

	/* Arguments for indexed draw.
	*/
	class indexed_drawing_args
	{
	public:
		std::uint32_t first_vertex()
		{

		}

		std::uint32_t vertex_count()
		{

		}

		std::uint32_t skipped_times()
		{

		}

		std::uint32_t times()
		{

		}

		std::uint32_t index_base()
		{

		}
	};

	/* Indexed direct draw.
	*/
	void draw(
		drawable_cmdbuf &cmdbuf_,
		const indexed_drawing_args &args_)
	{

	}

	/* Indexed indirect draw.
	*/
	void draw(
		drawable_cmdbuf &cmdbuf_,
		const buffered_array_view<indirect_args_buffer, indexed_drawing_args> &argsbufview_)
	{

	}
}